package Hxw3DEngine.core.controller
{
	import Hxw3DEngine.core.display.GameObject;
	
	import flash.display.InteractiveObject;
	
	//渲染树  深度从0开始
	public class RenderTree
	{
		//当前渲染列表的深度
		public var depth:int = 0;
		
		private var _renderList:Vector.<GameObject>;
		
		//当前渲染树渲染队列
		public function get renderList():Vector.<GameObject>{
			return _renderList ||= new Vector.<GameObject>();
		}
		
		/**
		 *新建一个渲染树 
		 * @param _depth	当前渲染树深度
		 */		
		public function RenderTree(_depth:int):void{
			depth = _depth;
		}
		
		
		/**
		 * 添加一个渲染对象到渲染队列
		 * @param renderable
		 * @param depth			深度默认是-1 默认加到渲染队列的最后  如果depth比渲染队列的长度还大那么也自动添加到最后
		 * @return 				返回它真实的深度
		 * 
		 */		
		public function add(renderable:GameObject,_depth:int = -1):int{
			var result:int = 0;
			if(_depth == -1 || _depth > renderList.length-1){
				renderList.push(renderable);
				result = renderList.length-1;
			}else{
				renderList.splice(_depth,0,renderable);
				result = _depth;
			}
			return result;
		}
		
		/**
		 *从渲染列表移除   
		 * @param value		value是渲染对象也可以 是深度
		 * @return 			返回该对象的深度
		 */		
		public function remove(value:*):int{
			var depth:int;
			if(value is GameObject)
				depth = renderList.indexOf(value as GameObject);
			else
				depth = value;
			renderList.splice(depth,1);
			return depth;
		}
		
		
		/**
		 *销毁前调用 
		 * @return 
		 * 
		 */		
		public function destry():void{
			renderList.length = 0;
			_renderList = null;
		}
		
		
	}
}